/*  NVS: non volatile storage in flash
 *
 * Copyright (c) 2018 Laczen
 *
 * SPDX-License-Identifier: Apache-2.0
 *
 * Change Logs:
 * Date           Author       Notes
 * 2023-09-03     Liuis        Ported from zephyr RTOS.
 */
 
#ifndef __NVS_PRIV_H_
#define __NVS_PRIV_H_

#ifdef __cplusplus
extern "C"
{
#endif

/*
 * MASKS AND SHIFT FOR ADDRESSES
 * an address in nvs is an uint32_t where:
 *   high 2 bytes represent the sector number
 *   low 2 bytes represent the offset in a sector
 */
#define ADDR_SECT_MASK      0xFFFF0000
#define ADDR_SECT_SHIFT     16
#define ADDR_OFFS_MASK      0x0000FFFF

/*
 * Status return values
 */
#define NVS_STATUS_NOSPACE  1

#define NVS_BUFFER_SIZE     32

#define NVS_ID_UNUSED	    0xFFFF
#define NVS_ID_DELETED	    0x0000
#define NVS_LOOKUP_CACHE_NO_ADDR 0xFFFFFFFF

	/* Allocation Table Entry */
	struct nvs_ate
	{
		uint16_t id;	 /* data id */
		uint16_t offset; /* data offset within sector */
		uint16_t len;	 /* data len within sector */
		uint8_t part;	 /* part of a multipart data - future extension */
		uint8_t crc8;	 /* crc8 check of the entry */
	} __packed;

#ifdef __cplusplus
}
#endif

#endif /* __NVS_PRIV_H_ */
